#ifndef __APEXBRAIN_STANDALONEWIDGET_H_
#define __APEXBRAIN_STANDALONEWIDGET_H_

#include <QWidget>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>
#include "global.h"
#include <QJsonArray>
#include <QVector>
#include <QTime>
#include <QTimer>

namespace Ui {
    class StandaloneWidget;
}

class StandaloneWidget : public QWidget
{
    Q_OBJECT

public:
    explicit StandaloneWidget(QWidget *parent = nullptr);
    ~StandaloneWidget();

protected:
    void closeEvent(QCloseEvent *event) override;

private:
    Ui::StandaloneWidget *ui;
    QNetworkAccessManager *m_networkAccessManager;

    /**
     * @brief questionNumber是要回答的的数量
     */
    static const int s_questionNumber;

    /**
     * @brief m_questions是问题的列表，用json存储
     */
    QJsonArray m_questions;

    /**
     * @brief 记录当前回答的问题的id
     */
    qsizetype m_currentQuestionId;

    /**
     * @brief 记录用户得分
     */
    int m_score;

    /**
     * @brief 计时器，用来每秒刷新倒计时进度条
     */
    QTimer *m_timer;

    /**
     * @brief 当前时间
     */
    QTime m_time;

    /**
     * @brief 在指定区间[start, end]内获取不重复的随机数
     * @param start 范围的最小值（包含）
     * @param end 范围的最大值（包含）
     * @param count 生成的个数
     * @return 随机数列表
     */
    QVector<int> getRandomNumbers(int start, int end, int count);

    /**
     * @brief 数据加载完毕，开始游戏，由questionsLoaded信号激活
     */
    void startAnswerGame();

    /**
     * @brief 显示问题信息
     */
    void showQuestion();

    /**
     * @brief 更新用户分数
     */
    void updateScore();

signals:
    void questionsLoaded();
};

#endif // __APEXBRAIN_STANDALONEWIDGET_H_
